Parallel Execution এবং Thread Management গাইড ও নোট

Java Technologies - টেস্টএনজি (TestNG) - TestNG এর Performance Optimization Techniques
379

Parallel Execution এবং Thread Management টেস্টএনজি (TestNG) ফ্রেমওয়ার্কের গুরুত্বপূর্ণ বৈশিষ্ট্য যা টেস্টিং প্রক্রিয়াকে দ্রুত, দক্ষ এবং কার্যকর করে তোলে। Parallel Execution আপনাকে একসাথে একাধিক টেস্ট, ক্লাস, বা মেথড চালানোর সুযোগ দেয়, আর Thread Management এই টেস্টগুলো সঠিকভাবে পরিচালনা করতে সহায়তা করে। এই দুটি ফিচার একত্রে ব্যবহার করলে বড় প্রজেক্টে টেস্টিং প্রক্রিয়া অনেক দ্রুত হতে পারে এবং রিসোর্স ব্যবহার আরও কার্যকর হয়।


Parallel Execution কী?

Parallel Execution হচ্ছে একাধিক টেস্ট, ক্লাস বা মেথড একসাথে একাধিক থ্রেডে চালানোর প্রক্রিয়া। এটি টাইম-ইনভেস্টমেন্ট কমিয়ে দেয় এবং CI/CD টুলসের মাধ্যমে টেস্টিং প্রক্রিয়া দ্রুত সম্পন্ন হয়। TestNG আপনাকে বিভিন্ন স্তরে প্যারালাল এক্সিকিউশন করতে দেয়, যেমন:

  1. Test Level
  2. Class Level
  3. Method Level

Parallel Execution কনফিগারেশন

TestNG XML ফাইলের মাধ্যমে Parallel Execution কনফিগার করা যায়। নিচে এর কনফিগারেশন ধাপগুলো দেওয়া হল।

১. Test Level Parallel Execution

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="ParallelTestSuite" parallel="tests" thread-count="2">
    <test name="Test1">
        <classes>
            <class name="com.example.TestClass1" />
        </classes>
    </test>
    <test name="Test2">
        <classes>
            <class name="com.example.TestClass2" />
        </classes>
    </test>
</suite>
  • parallel="tests": এটি টেস্ট লেভেলে প্যারালাল এক্সিকিউশন চালায়।
  • thread-count="2": দুটি থ্রেড ব্যবহার করে দুটি টেস্ট একসাথে চালানো হবে।

২. Class Level Parallel Execution

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="ParallelClassSuite" parallel="classes" thread-count="3">
    <test name="TestClassExecution">
        <classes>
            <class name="com.example.TestClass1" />
            <class name="com.example.TestClass2" />
            <class name="com.example.TestClass3" />
        </classes>
    </test>
</suite>
  • parallel="classes": একই টেস্টের মধ্যে ক্লাসগুলো প্যারালালে রান হবে।
  • thread-count="3": তিনটি থ্রেড ব্যবহার করে তিনটি ক্লাস একসাথে চালানো হবে।

৩. Method Level Parallel Execution

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="ParallelMethodSuite" parallel="methods" thread-count="4">
    <test name="TestMethodExecution">
        <classes>
            <class name="com.example.TestClass" />
        </classes>
    </test>
</suite>
  • parallel="methods": একই ক্লাসের মেথডগুলো প্যারালালে চালানো হবে।
  • thread-count="4": চারটি থ্রেড ব্যবহার করে চারটি মেথড একসাথে চালানো হবে।

Thread Management কী?

Thread Management এর মাধ্যমে নির্ধারণ করা হয় কতটি থ্রেড ব্যবহার করা হবে, তাদের কিভাবে পরিচালনা করা হবে, এবং তারা একে অপরের সাথে কীভাবে ইন্টারঅ্যাক্ট করবে। TestNG আপনাকে এই থ্রেডগুলোর ব্যবস্থাপনা করতে সাহায্য করে যাতে Thread Safety এবং Resource Management ঠিকভাবে নিশ্চিত হয়।


Thread Management কনফিগারেশন

১. Thread Count নির্ধারণ

thread-count অ্যাট্রিবিউট ব্যবহার করে আপনি সর্বোচ্চ কতটি থ্রেড একসাথে চলবে তা নির্ধারণ করতে পারেন। এটি নির্ভর করে আপনার সিস্টেমের CPU কোরের সংখ্যা এবং টেস্টের ধরন অনুসারে।

<suite name="ThreadManagementSuite" parallel="methods" thread-count="4">
    <test name="TestMethodExecution">
        <classes>
            <class name="com.example.TestClass" />
        </classes>
    </test>
</suite>

ব্যাখ্যা:

  • parallel="methods": একই ক্লাসের মেথডগুলো প্যারালালে রান হবে।
  • thread-count="4": চারটি থ্রেড ব্যবহার করে মেথডগুলো একসাথে চালানো হবে।

২. Thread Safety নিশ্চিত করা

কিছু টেস্ট মেথড থ্রেড সেফ না হলে একাধিক থ্রেডে রান করার সময় ডাটা ইনকনসিস্টেন্সি হতে পারে। তাই মেথডগুলো থ্রেড সেফ করার জন্য @BeforeMethod, @AfterMethod এবং অন্যান্য সঠিক সিঙ্ক্রোনাইজেশন মেকানিজম ব্যবহার করা উচিত।

কোড উদাহরণ:

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;

public class TestClass {
    
    @BeforeMethod
    public synchronized void setUp() {
        // Thread-safe setup code
    }
    
    @Test
    public void testMethod1() {
        System.out.println("Test method 1 executed by thread " + Thread.currentThread().getId());
    }
    
    @Test
    public void testMethod2() {
        System.out.println("Test method 2 executed by thread " + Thread.currentThread().getId());
    }
    
    @AfterMethod
    public synchronized void tearDown() {
        // Thread-safe teardown code
    }
}

এখানে synchronized ব্যবহার করা হয়েছে যাতে একাধিক থ্রেড একই সময়ে setUp() এবং tearDown() মেথডগুলো এক্সিকিউট না করে।

৩. ThreadLocal ব্যবহার

TestNG তে ThreadLocal ব্যবহার করলে প্রতিটি থ্রেড আলাদা ডাটা ব্যবহার করতে পারে, যাতে একে অপরের ডাটা ম্যানিপুলেট না করে।

import org.testng.annotations.Test;

public class TestClass {
    private static ThreadLocal<Integer> threadLocalData = new ThreadLocal<Integer>() {
        @Override
        protected Integer initialValue() {
            return 0;
        }
    };

    @Test
    public void testMethod() {
        threadLocalData.set(threadLocalData.get() + 1);
        System.out.println("ThreadLocal value: " + threadLocalData.get());
    }
}

এখানে ThreadLocal ব্যবহার করা হয়েছে যাতে প্রতিটি থ্রেড তার নিজস্ব ডাটা পরিচালনা করতে পারে, যা থ্রেড সেফটি নিশ্চিত করে।


Parallel Execution এবং Thread Management এর সেরা অভ্যাস

  1. Thread Count কনফিগারেশন: আপনার সিস্টেমের CPU কোরের ভিত্তিতে সঠিক thread-count নির্বাচন করুন।
  2. Thread Safety: নিশ্চিত করুন যে, আপনার মেথডগুলো থ্রেড সেফ।
  3. ডাটা শেয়ারিং এড়ানো: একাধিক থ্রেড যদি একই ডাটা শেয়ার করে তবে ThreadLocal ব্যবহার করুন।
  4. Performance Monitor: প্যারালাল এক্সিকিউশনে সিস্টেমের কর্মক্ষমতা মনিটর করুন, যাতে কোনো অতিরিক্ত রিসোর্স ব্যবহৃত না হয়।

সারাংশ

Parallel Execution এবং Thread Management TestNG-তে কার্যকরভাবে টেস্টিং প্রক্রিয়া দ্রুত এবং দক্ষ করতে সাহায্য করে। Thread Management সঠিকভাবে কনফিগার করলে একাধিক টেস্ট, ক্লাস, বা মেথড প্যারালালে চালানো সম্ভব হয়, যা সময় বাঁচায় এবং রিসোর্স ব্যবহার অপ্টিমাইজ করে। তবে, থ্রেড সেফটি এবং রিসোর্স শেয়ারিং এর দিকে নজর রাখা প্রয়োজন যাতে ডাটা ইনকনসিস্টেন্সি বা অন্য কোনো সমস্যা না হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...